﻿#ifndef UAlarm_H
#define UAlarm_H

#include <QWidget>
#include <qtimer.h>
#include "ui_UAlarm.h"
#include "CAlarmPoint.h"
#include "CSpeechAlert.h"
#include "CAlarmDetailsDlg.h"
/**
* @ Author: Gaojia
* @ Description: 背景颜色结构体  1 闪烁亮的时候  2闪烁灭的时候
*/
struct SShowColor
{
	QColor cBackGround1;   //背景色亮
	QColor cBackGround2;   //背景色灭
	QColor cText1;         //字体亮
	QColor cText2;         //字体灭
	QString sButtenStyle1;  //按钮样式 亮
	QString sButtenStyle2;  //按钮样式 灭
	SShowColor()
	{

	}
};

class UAlarm : public QWidget
{
	Q_OBJECT

public:
	UAlarm(QWidget* parent = nullptr);
	UAlarm(QPushButton *pBtn,int nType=0, QWidget *parent = nullptr);
	~UAlarm();
	 void startRufush();                      //开始刷新
	 void stopRufush();                       //停止刷新
	 void rufushPoint();                      //刷新测点
private:
	void initUi();                                  //初始化界面
	void initData();                                //初始化数据
	void resetData();                               //重置所有数组数据
	QMap<int, QVector<SShowColor>>m_mapShowColor;   //不同状态 背景和字体颜色
	void initColor();                               //初始化颜色
	void updateRowBackground();                     //刷新背景颜色
	void refushTable();                             //刷新表格
	void timerEvent(QTimerEvent* event)override;
	static void speechAlert(CAlarmPoint* pAlarmPoint);   //语音播报
	void getDbPointInfo();      //获取数据库测点信息
	void createSosPoint();      //创建sos测点
	void refushSosPoint();    //从数据库刷新测点数据
	void refushPoint();       //遍历报警数据状态有没有发生变化 如果有 更新到数据库
private:
	Ui::UAlarmClass ui;
	QVector<CAlarmPoint*>m_vecAlarm;
	QVector<QVector<QString>>m_vecDb;          //数据库里面所有测点记录
	QVector<QVector<QString>>m_vecCreatePoint; //创建测点
	QVector<CAlarmPoint*>m_vecSos;             //人员定位测点
	QVector<CAlarmPoint*>m_vecFalut;
	QMap<QString, CAlarmPoint*>m_mapAlarm;   //工艺报警map QString1 节点.设备名称.测点名称
	QMap<QString, CAlarmPoint*>m_mapAlarmInsert;   //工艺报警map QString1 节点.设备名称.测点名称
	QMap<QString, CAlarmPoint*>m_mapSos;   //Sos报警map QString1 节点.设备名称.测点名称
	QPushButton* m_pBtn;
	int m_nType;
	bool m_bToggle;                                 //闪烁标志位
	int m_nToggleTimer;	                           //刷新ui
	int m_nRefushTableIndex;                       //刷新表格计数
	int m_nTechIndex;                              //语音播报计数  
	int m_nTableTimer;	                           //刷新ui
	QVector<CAlarmPoint*>m_vecCurrAlarm;           //当前正在报警的点
	bool m_bInit;                                  //是否初始化
	CAlarmDetailsDlg* m_pAlarmDetailsDlg;
private slots:
	void slotAllSure();   //报警全部确认
	void slotSure();      //报警确认
	void slotCancel();    //报警取消 
	void slotShow();      //报警界面显示 
	void slotClose();      //关闭界面 
	
};
#endif